home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Pascal Super Library
/
Pascal Super Library (CW International)(1997).bin
/
TURB_VIS
/
TCYBER25
/
CYANI.ZIP
/
PCXSNP.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-10-20
|
8KB
|
78 lines
{
Turbo Vision CyberTools 2.5
(C) 1994 Steve Goldsmith
All Rights Reserved
}
UNIT PCXSNP ;{$I APP.INC} {$X+} INTERFACE USES DOS , OBJECTS , DRIVERS , VIEWS , DIALOGS , APP , MSGBOX ,
{$IFDEF UseDLL} CYBERAPI , {$ELSE} VGA , {$ENDIF} PCX , SNIP , TVSTR ;TYPE PPCXSNP =^TPCXSNP ;
TPCXSNP =OBJECT (TDIALOG)COMPAREFLAG :BOOLEAN ;CONVSEQ , SNIPXSIZE , SNIPYSIZE , FRAMESIZE , TOTALFRAMES , FRAMECNT ,
FRAMEDELAY , FRAMETABLEELE :WORD ;FRAMEFILEPOS :LONGINT ;DELAYSTR :STRING [ 9 ] ;SNIPNAME :PATHSTR ;
FILELISTCOLL :PSTRINGCOLLECTION ;PCXDECODE1 :TDECODEPCXFILE256 ;PCXDECODE2 :TDECODEPCXFILE256 ;
SNIPENCODE :TWRITESNPFILE ;INFOLINE :PINPUTLINE ;DELAYLINE :PINPUTLINE ;DELAYBAR :PSCROLLBAR ;CONSTRUCTOR INIT
(FL :PSTRINGCOLLECTION );PROCEDURE UPDATEINFO (MSG :STRING );PROCEDURE UPDATEDELAY ;PROCEDURE SCANFIRST ;
PROCEDURE SCANNEXT ;PROCEDURE CREATESNIP ;PROCEDURE COMPAREFRAMES (OLDFRAME ,NEWFRAME:VGADATABUFPTR );
PROCEDURE DONECONVERT ;PROCEDURE CONVERTFRAME ;PROCEDURE GETEVENT (VAR EVENT :TEVENT );VIRTUAL;PROCEDURE HANDLEEVENT
(VAR EVENT:TEVENT);VIRTUAL;END;CONST SNPWAIT=0;SNPSCANFIRST=1;SNPSCANNEXT=2;SNPCREATESNIP=3;SNPCONVERT=4;SNPDONE =5;
IMPLEMENTATION CONSTRUCTOR TPCXSNP.INIT (FL:PSTRINGCOLLECTION);VAR OO1I:TRECT;BEGIN OO1I.ASSIGN (0 , 0 , 65 , 8 );
INHERITED INIT(OO1I , 'Make Snip');OPTIONS := OPTIONS OR OFCENTERX OR OFCENTERY ;GETEXTENT (OO1I );OO1I.A.X := OO1I.A.X +
2 ;OO1I.B.X := OO1I.B.X - 2 ;OO1I.A.Y := OO1I.A.Y + 2 ;OO1I.B.Y := OO1I.A.Y + 1 ;INFOLINE := NEW (PINPUTLINE , INIT (OO1I
, 127 ));INFOLINE ^. OPTIONS := INFOLINE ^. OPTIONS AND NOT OFSELECTABLE ;INSERT (INFOLINE );GETEXTENT (OO1I );OO1I.A.X
:= OO1I.A.X + 2 ;OO1I.B.X := OO1I.A.X + 20 ;OO1I.A.Y := OO1I.A.Y + 5 ;OO1I.B.Y := OO1I.A.Y + 1 ;DELAYBAR := NEW
(PSCROLLBAR , INIT (OO1I ));FRAMEDELAY := 1 ;DELAYBAR ^. SETPARAMS (1 , 1 , 1080 , 18 , 1 );DELAYBAR ^. OPTIONS :=
DELAYBAR ^. OPTIONS OR OFSELECTABLE ;INSERT (DELAYBAR );GETEXTENT (OO1I );OO1I.A.X := OO1I.A.X + 1 ;OO1I.B.X := OO1I.A.X
+ 6 ;OO1I.A.Y := OO1I.A.Y + 4 ;OO1I.B.Y := OO1I.A.Y + 1 ;INSERT (NEW (PLABEL , INIT (OO1I , '~D~elay', DELAYBAR )));
GETEXTENT (OO1I );OO1I.A.X := OO1I.A.X + 24 ;OO1I.B.X := OO1I.A.X + 11 ;OO1I.A.Y := OO1I.A.Y + 5 ;OO1I.B.Y := OO1I.A.Y +
1 ;DELAYLINE := NEW (PINPUTLINE , INIT (OO1I , 127 ));DELAYLINE ^. OPTIONS := DELAYLINE ^. OPTIONS AND NOT OFSELECTABLE ;
INSERT (DELAYLINE );GETEXTENT (OO1I );OO1I.A.X := OO1I.B.X - 24 ;OO1I.B.X := OO1I.A.X + 10 ;OO1I.A.Y := OO1I.B.Y - 3 ;
OO1I.B.Y := OO1I.A.Y + 2 ;INSERT (NEW (PBUTTON , INIT (OO1I , '~C~ancel', CMCANCEL , BFNORMAL )));OO1I.A.X := OO1I.B.X +
2 ;OO1I.B.X := OO1I.A.X + 10 ;INSERT (NEW (PBUTTON , INIT (OO1I , 'O~K~', CMOK , BFDEFAULT )));UPDATEINFO
('Set delay, press OK to process current directory.');FILELISTCOLL := FL ;UPDATEDELAY ;CONVSEQ := SNPWAIT ;COMPAREFLAG :=
TRUE END ;PROCEDURE TPCXSNP.UPDATEINFO (MSG:STRING );BEGIN INFOLINE ^. SETDATA (MSG )END ;PROCEDURE TPCXSNP.UPDATEDELAY ;
BEGIN DELAYSTR := INTTORIGHTSTR (FRAMEDELAY , 5 )+ '/18';DELAYLINE ^. SETDATA (DELAYSTR )END ;
PROCEDURE TPCXSNP.SCANFIRST ;BEGIN UPDATEINFO ('Scanning '+ GETFILENAMESTR (PSTRING (FILELISTCOLL ^. AT (0 ))^));
DELAYBAR ^. OPTIONS := DELAYBAR ^. OPTIONS AND NOT OFSELECTABLE ;DELAYBAR ^. SETSTATE (SFDISABLED , TRUE );IF DELAYBAR ^.
GETSTATE (SFSELECTED )THEN SELECTNEXT (TRUE );TOTALFRAMES := FILELISTCOLL ^. COUNT ;FRAMECNT := 1 ;PCXDECODE1.INIT
(PSTRING (FILELISTCOLL ^. AT (0 ))^);IF PCXDECODE1.READERROR =0 THEN BEGIN WITH PCXDECODE1 DO BEGIN SNIPXSIZE :=
HEADER.XMAX - HEADER.XMIN + 1 ;SNIPYSIZE := HEADER.YMAX - HEADER.YMIN + 1 ;DECODEFILE END ;FRAMESIZE := SNIPXSIZE *
SNIPYSIZE ;CONVSEQ := SNPSCANNEXT END ELSE BEGIN CONVSEQ := SNPDONE ;MESSAGEBOX (PSTRING (FILELISTCOLL ^. AT (0 ))^+
' is not in expected format.', NIL , MFERROR + MFOKBUTTON );UPDATEINFO ('Processing terminated.')END ;PCXDECODE1.DONE END
;PROCEDURE TPCXSNP.SCANNEXT ;BEGIN IF FRAMECNT < FILELISTCOLL ^. COUNT THEN BEGIN UPDATEINFO ('Scanning '+ GETFILENAMESTR
(PSTRING (FILELISTCOLL ^. AT (FRAMECNT ))^));PCXDECODE1.INIT (PSTRING (FILELISTCOLL ^. AT (FRAMECNT ))^);IF
PCXDECODE1.READERROR =0 THEN BEGIN PCXDECODE1.DECODEFILE ;IF (PCXDECODE1.HEADER.XMAX - PCXDECODE1.HEADER.XMIN + 1 <>
SNIPXSIZE )OR (PCXDECODE1.HEADER.YMAX - PCXDECODE1.HEADER.YMIN + 1 <> SNIPYSIZE )THEN BEGIN CONVSEQ := SNPDONE ;
MESSAGEBOX (PSTRING (FILELISTCOLL ^. AT (FRAMECNT ))^+ ' not correct size.', NIL , MFERROR + MFOKBUTTON );UPDATEINFO
('Processing terminated.')END END ELSE BEGIN CONVSEQ := SNPDONE ;MESSAGEBOX ('PCX decode error scanning '+ PSTRING
(FILELISTCOLL ^. AT (FRAMECNT ))^, NIL , MFERROR + MFOKBUTTON );UPDATEINFO ('Processing terminated.')END ;
PCXDECODE1.DONE ;INC (FRAMECNT )END ELSE CONVSEQ := SNPCREATESNIP END ;PROCEDURE TPCXSNP.CREATESNIP ;BEGIN SNIPNAME :=
ADDEXTSTR (PSTRING (FILELISTCOLL ^. AT (0 ))^, 'SNP');UPDATEINFO ('Adding '+ GETFILENAMESTR (PSTRING (FILELISTCOLL ^. AT
(0 ))^));PCXDECODE1.INIT (PSTRING (FILELISTCOLL ^. AT (0 ))^);IF PCXDECODE1.READERROR =0 THEN BEGIN PCXDECODE1.DECODEFILE
;PCXDECODE1.PALETTE256TO64 ;SNIPENCODE.INIT (SNIPNAME , TOTALFRAMES , PCXDECODE1.XSIZE , PCXDECODE1.YSIZE , FRAMEDELAY );
SNIPENCODE.WRITEPAL256 (@ PCXDECODE1.READPALETTE );SNIPENCODE.WRITEFRAMETABLE ;SNIPENCODE.WRITEFIRSTFRAME
(PCXDECODE1.DECODEBUFPTR );SNIPENCODE.WRITEFRAMEBYTE (0 );FRAMEFILEPOS := SIZEOF (SNIPENCODE.HEADER )+ SIZEOF (VGAPALETTE
)+ (TOTALFRAMES + 1 )* SIZEOF (LONGINT );SNIPENCODE.FRAMETABLEPTR ^[ 0 ] := FRAMEFILEPOS ;FRAMETABLEELE := 1 ;
FRAMEFILEPOS := FRAMEFILEPOS + PCXDECODE1.XSIZE * PCXDECODE1.YSIZE + 1 ;FRAMECNT := 1 ;CONVSEQ := SNPCONVERT END ELSE
BEGIN PCXDECODE1.DONE ;CONVSEQ := SNPDONE ;UPDATEINFO ('Processing terminated.')END END ;PROCEDURE TPCXSNP.COMPAREFRAMES
(OLDFRAME,NEWFRAME:VGADATABUFPTR);VAR OOIO1l11II1I:BYTE;OOIOI0I011l0,O101l00l1OllI:WORD;BEGIN OOIO1l11II1I := 0 ;
OOIOI0I011l0 := 0 ;SNIPENCODE.FRAMETABLEPTR ^[ FRAMETABLEELE ] := FRAMEFILEPOS ;INC (FRAMETABLEELE );O101l00l1OllI :=
FRAMESIZE - 1 ;FOR OOIOI0I011l0 := 0 TO O101l00l1OllI DO BEGIN IF OLDFRAME ^[ OOIOI0I011l0 ] =NEWFRAME ^[ OOIOI0I011l0 ]
THEN BEGIN INC (OOIO1l11II1I );IF OOIO1l11II1I =63 THEN BEGIN SNIPENCODE.WRITEFRAMEBYTE (OOIO1l11II1I );INC (FRAMEFILEPOS
);OOIO1l11II1I := 0 END END ELSE BEGIN IF OOIO1l11II1I > 0 THEN BEGIN SNIPENCODE.WRITEFRAMEBYTE (OOIO1l11II1I );INC
(FRAMEFILEPOS );OOIO1l11II1I := 0 END ;SNIPENCODE.WRITEFRAMEBYTE (NEWFRAME ^[ OOIOI0I011l0 ] );INC (FRAMEFILEPOS )END END
;SNIPENCODE.WRITEFRAMEBYTE (0 );INC (FRAMEFILEPOS )END ;PROCEDURE TPCXSNP.DONECONVERT ;BEGIN IF CONVSEQ =SNPCONVERT THEN
BEGIN IF COMPAREFLAG THEN PCXDECODE1.DONE ELSE PCXDECODE2.DONE ;SNIPENCODE.FLUSHBUF ;SNIPENCODE.FRAMETABLEPTR ^[
FRAMETABLEELE ] := FRAMEFILEPOS ;SNIPENCODE.WRITEFRAMETABLE ;SNIPENCODE.DONE ;CONVSEQ := SNPDONE END END ;
PROCEDURE TPCXSNP.CONVERTFRAME ;BEGIN IF FRAMECNT < FILELISTCOLL ^. COUNT THEN BEGIN UPDATEINFO ('Adding '+
GETFILENAMESTR (PSTRING (FILELISTCOLL ^. AT (FRAMECNT ))^));IF COMPAREFLAG THEN BEGIN PCXDECODE2.INIT (PSTRING
(FILELISTCOLL ^. AT (FRAMECNT ))^);IF PCXDECODE2.READERROR =0 THEN BEGIN PCXDECODE2.DECODEFILE ;COMPAREFRAMES
(PCXDECODE1.DECODEBUFPTR , PCXDECODE2.DECODEBUFPTR )END ;PCXDECODE1.DONE ;COMPAREFLAG := FALSE END ELSE
BEGIN PCXDECODE1.INIT (PSTRING (FILELISTCOLL ^. AT (FRAMECNT ))^);IF PCXDECODE1.READERROR =0 THEN
BEGIN PCXDECODE1.DECODEFILE ;COMPAREFRAMES (PCXDECODE2.DECODEBUFPTR , PCXDECODE1.DECODEBUFPTR )END ;PCXDECODE2.DONE ;
COMPAREFLAG := TRUE END ;INC (FRAMECNT )END ELSE BEGIN DONECONVERT ;UPDATEINFO ('Finished processing '+ GETFILENAMESTR
(SNIPNAME ))END END ;PROCEDURE TPCXSNP.GETEVENT (VAR EVENT:TEVENT);BEGIN CASE CONVSEQ OF SNPSCANFIRST :SCANFIRST ;
SNPSCANNEXT :SCANNEXT ;SNPCREATESNIP :CREATESNIP ;SNPCONVERT :CONVERTFRAME END ;INHERITED GETEVENT(EVENT )END ;
PROCEDURE TPCXSNP.HANDLEEVENT (VAR EVENT:TEVENT);BEGIN IF EVENT.WHAT =EVCOMMAND THEN CASE EVENT.COMMAND OF CMCANCEL
:DONECONVERT ;CMOK :IF CONVSEQ =SNPWAIT THEN BEGIN CONVSEQ := SNPSCANFIRST ;CLEAREVENT (EVENT )END ELSE IF CONVSEQ <>
SNPDONE THEN CLEAREVENT (EVENT )END ;INHERITED HANDLEEVENT(EVENT );IF (EVENT.WHAT =EVBROADCAST )AND (EVENT.COMMAND
=CMSCROLLBARCHANGED )THEN BEGIN FRAMEDELAY := DELAYBAR ^. VALUE ;UPDATEDELAY END ;END ;END .